﻿using GalaSoft.MvvmLight.Command;
using JiveMessenger.Models;
using JiveMessenger.Utilities;
using JmShared;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Threading.Tasks;
using Windows.UI.Xaml.Data;

namespace JiveMessenger.ViewModels
{
    public interface IViewModelContactList
    {
        RelayCommand OpenAddContactPageCommand { get; set; }
        RelayCommand OpenGroupAndContactPageCommand { get; set; }
        RelayCommand CreateGroupCommand { get; set; }
        RelayCommand<IChatGroup> InviteContactToGroupCommand { get; set; }
        RelayCommand<IChatGroup> LeaveGroupCommand { get; set; }
        RelayCommand<IChatGroup> BlockGroupCommand { get; set; }
        RelayCommand<IContact> OpenPmCommand { get; set; }
        RelayCommand OpenNotificationsCommand { get; set; }
        RelayCommand<IContact> IgnoreContactCommand { get; set; }
        RelayCommand<IChatGroup> OpenGroupCommand { get; set; }
        RelayCommand<IChatGroup> ManageGroupCommand { get; set; }
        RelayCommand<IContact> AddCustomEmoticonsCommand { get; set; }
        RelayCommand<IEmoticon> DeleteEmoticonCommand { get; set; }
        RelayCommand AddEmoticonCommand { get; set; }
        ObservableCollection<IContact> Contacts { get; set; }
        ObservableCollection<VisualGroup> GroupedContacts { get; set; }
        IContact CurrentUser { get; set; }
        ClientStatus ManualClientStatus { get; set; }
        void AddOrUpdateContact(JmShared.UserInfo user, bool createVisualGroups);
        void SetContactAsOffline(string userName);
        void RunOnNetworkConnect();
        void RunOnNetworkDisconnect();
        void Cleanup();
    }
}
